package org.sninwo.lnbook.book.web;

import javax.annotation.Resource;

import org.apache.shiro.SecurityUtils;
import org.apache.struts2.convention.annotation.Namespace;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sninwo.lnbook.base.BaseAction;
import org.sninwo.lnbook.book.entity.User;
import org.sninwo.lnbook.book.service.UserManager;
import org.sninwo.lnbook.uitls.WebUtils;

/**
 * 登陆处理
 * @author LinZongxue
 * @date 2011-04-03
 */
@Namespace("/admin")
public class LoginAction extends BaseAction {
	private static final long serialVersionUID = -3823950086511904666L;
	static Logger logger = LoggerFactory.getLogger(LoginAction.class);	

	public String newPassword;
	
	@Resource
	private UserManager userMgr;
	
	/**
	 * 由于使用了shiro框架，登陆逻辑被定义在ShiroRealm.doGetAuthenticationInfo(...)方法中。
	 * 登陆成功后输出登陆信息(json)。
	 */
	public String login(){
		if (WebUtils.getReqParam("username") == null){ //进入登陆页面，不执行登陆逻辑
			return successJson();
		}
		//获取并保存登陆信息，如果获取不到则说明登陆失败。
		//登陆失败后的处理在ShiroAuthcFilter类中，
		//登陆失败的信息保存在request的loginError属性中。
		Object principal = SecurityUtils.getSubject().getPrincipal();
		if (principal == null){
			return failureJson((String)WebUtils.getReqAttr("loginError"));
		}
		User user = userMgr.getUserByName(principal.toString());
		WebUtils.setLoginInfo(user);
		return this.successJson(user);
	}
	
	/**
	 * 获取用户的登陆信息。
	 */
	public String getLoginInfo(){
		return successJson(WebUtils.getLoginInfo());
	}
	
	public String logout(){
		SecurityUtils.getSubject().logout();
		return successJson();
	}
	
	/**
	 * 修改当前用户的密码
	 * @return
	 */
	public String changePassword(){
		userMgr.changePassword(newPassword);
		return successJson();
	}
}
